package com.mandao.concurrency.interviewset.backdemo;

import java.util.ArrayList;
import java.util.List;

/**
 * Description
 *      -->排号
 * @author woniu
 * @date 2019/6/29 11:04
 */
public class NumberManager {

    /**
     定义一个标记上一个客户号码的成员变量
      */
    private Integer lastNumber = 0;
    /**
     * 定义一个号码存放的 容器
     */
    private List<Integer> queueNumber = new ArrayList<>();

    /**
     *  定义一个产生新号码的方法
     */
    public synchronized Integer generateNewManager(){
        //添加元素
        queueNumber.add(++lastNumber);
        //创建元素
        return lastNumber;
    }

    /**
     *  获取马上要为之服务的号码的方法，
     *  		这两个方法被不同的线程操作了相同的数据，所以，要进行同步
     */
    public synchronized Integer fetchServiceNumber(){
        if(queueNumber.size() >0)
            //remove返回值为该角标上元素
            return queueNumber.remove(0);
        else
            return null;
    }
}
